PHP3 est un language interprété orienté Web. Syntaxiquement, c'est un mélange de C et de Perl. Les scripts PHP3 sont lus et interprétés par le moteur PHP3.
Il comporte au total plus de 500 fonctions. Il est fournit avec des librairies offrant des fonctionalitées diverses : accès aux bases de données, fonctions d'images, sockets, protocoles internet divers...
Un script PHP3 peut comprendre a la fois du code PHP et du code HTML, non interprété. On doit donc encadrer les parties comportant le code PHP entre 2 balises <? et ?>. Le reste de la page n'est pas interprété.
Note: La balise <?php est équivalente a <?. On peut également utiliser les balises <script language="php"> et </script> Enfin, pour les programmeurs ASP, sachez que les balises <% et %> sont également reconnues.
Le séparateur d'instructions est le ;. Il est obligatoire, sauf si l'instruction est suivie de la balise ?>
La fonction echo affiche un (ou plus) argument. Si l'argument est une chaine entre simple quote ' il est affiché tel quel.
Avec le quote double " les variables contenues dans cette chaine sont interprétées.
On peut également inclure le resultat d'une fonction directement dans un echo.
echo "Votre Nom en majuscule : ", strtoupper( "Toto" ), "\n";
Pour afficher le caractère ``, on l'escape à l'aide du caractère d'échappement \
On peut inclure des caractères spéciaux pour controler le flux affiché:
\n saut de ligne \r end of line \t tabulation
on utilise exit();
Commentaire sur une ligne: // ou #
Commentaire sur plusieurs lignes: /* ... */
On peut executer un script PHP3 en ligne de commande, ce qui permet des usages hors du simple cadre ``Web''. l'option -q évite l'affichage de la premiere ligne Content-type: text/html
PHP dispose des opérateurs classiques du C ainsi que d'autres inspirés du Perl.
== égalité > inférieur strict < supérieur strict <= inférieur ou egal >= supérieur ou egal ! négation
Les opérateurs logiques sont utilisés dans les tests, par ex. dans un if( condition )
&& et || ou xor ou exclusif ! negation
Note: les opérateurs and, or , not sont également disponibles et font la même chose.
+ addition - soustraction / division * multiplication % modulo ++ increment -- decrement
l'opérateur / renvoie un entier si les 2 opérandes sont des entiers, sinon il renvoie un flottant.
= affectation += addition puis affectation -= sosutraction puis affectation *= multiplication puis affectation /= division puis affectation %= modulo puis affectation
L'opérateur de concatenation . est utilisable sur les scalaires chaines.
L'opérateur ? : ou opérateur de test trinaire. Sa syntaxe est [test logique] ? [expression si vrai] : [expression si faux]
On peut également l'utiliser pour compacter les sequence de test / affectations
& ET | OU ^ XOR ~ NOT
PHP permet de definir des constantes a l'aide de la fonction define.
Deux constantes sont predéfinies par PHP : __FILE__ contient le nom du fichier et __LINE__ le numéro de la ligne courante.
Les variables sont précédées du signe $, quelque soit leur type. Leur déclaration est optionelle.
On dispose de 3 types de variables: scalaire, tableau et tableau associatif. Il n'y a pas de type pointeur.
La fonction isset permet de tester si une variable est définie.
La fonction unset permet de supprimer la variable, et de désallouer la mémoire utilisée.
La fonction gettype permet de connaitre le type de la variable. Elle renvoie une chaine : ``string'' ou ``integer'' ou ``double'' ou ``array'' ou ``object''. Note : Si la variable n'est pas définie, elle renvoie "string"
On peut également tester un type particulier a l'aide des fonctions is_array, is_string, is_int,is_float, is_object .
Note: Les fonctions is_double et id_real sont équivalentes a is_float. Les fonctions is_long et is_integer sont équivalentes a is_int.
Les variables PHP sont a typage faible. C'est PHP qui décide de son type lors de l'affectation.
Il est parfois utile de forcer le type d'une variable. On utilise la fonction settype ou bien les opérateurs de casting (int), (string) settype renvoie vrai si la conversion a fonctionné, faux sinon.
Les opérateurs de conversion sont :
(string) conversion en chaine (int) conversion en entier. synonyme: (integer) (real) conversion en double. synonymes: (double),(float) (array) conversion en tableau (object) conversion en objet
On peut également utiliser strval, intval, doubleval qui renvoient la variable convertie en chaine / entier / réel. Ces fonctions ne fonctionnent pas sur les tableaux.
Les variables scalaires sont de 3 types : chaines, entiers, reels.
Renvoie le nombre d'éléments d'un tableau. équivalent de count
Renvoie true si la variable est de type tableau (ou tableau associatif), false sinon.
reset($tablo)
place le pointeur interne sur le premier élément
du tableau: Chaque variable tableau possède un pointeur interne repérant
l'élément courant.
end($tablo)
place le pointeur interne du tableau sur le
dernier élément du tableau.
renvoie l'élément courant du tableau.
déplace le pointeur vers l'élément suivant, et renvoie cet élément. renvoie false si il n'existe pas
déplace le pointeur vers l'élément précédent, et renvoie cet élément. renvoie false si il n'existe pas
$a=each($tablo) renvoie l'index et la valeur courante dans un tableau à 2 elements; $a[0] contient l'index, $a[1] la valeur.
list(
$scalar1, $scalr2, ... ) construit un tableau temporaire
à partir des variables scalaires passées en argument.
key($tablo)
renvoie l'index de l'élément courant du tableau.
Differentes fonctions de tri de tableau.
sort trie par valeurs croissantes, rsort par valeurs décroissantes
usort et uasort permettent au programmeur d'implémenter lui-meme la fonction de tri utilisée. PHP appelle successivement La fonction doit retourner -1 / 0 / 1 suivant que le premier élément est inférieur / égal / supérieur au second. Dans l'exemple ci-dessous, on implémente un tri qui ne tient pas compte des majuscules/ minuscules
Un tableau associatif est un tableau dont l'index est une chaine de caractère au lieu d'un nombre. On parle aussi de ``hash array'' ou ``hash''. Il se déclare comme un tableau traditionnel, la distinction se fait lors de l'affectation.
Affectons un nombre de calories moyen aux fruits.
Pour tester l'existence d'un element, on utilise la fonction isset()
Ces fonctions de tri conservent la relation entre l'index et la valeur, généralement le cas dans un tableau associatif.
asort trie par valeurs croissantes, arsort par valeurs décroissantes
ksort trie par index (key) croissantes
[UNDER WORK]
Test if ``basique''
if( [condition] ) { ... }
Test if-else :
if( [condition] ) { ... } else { ... }
Test if-elseif :
if( [condition] ) { ... } elseif( [condition] ) { ... }
Dans le cas de plusieurs tests successif portant sur une meme variable, on utilisera plutot le test swith Note: Si le corps du test ne comporte qu'une instruction, les acollades {} sont optionnels, ( contrairement au Perl).
Le switch n'a pas d'équivalent en Perl. il est l'équivalent du SELECT CASE en Basic. Il permet de confronter une variable à plusieurs valeurs prédéfinies. Il permet un code plus compact et lisible qu'un test if-elseif-elseif...
switch( [variable] ) { case [valeur1] : [bloc d'instructions] break;
case [valeur2] : [bloc d'instructions] break; ... default: [bloc d'instructions] }
La valeur de [variable] est comparé successivement à chaque case. Si il y a égalité, le bloc d'instruction est executé.
Il ne faut pas omettre le break en fin de bloc, sans quoi le reste du switch est éxecuté.
Enfin, le handler default permet de définir des instructions à effectuer par défaut, c'est à dire si aucun case n'a ``fonctionné''.
En PHP3, on dispose des structures de boucle similaires au C.
L'instruction break permet de sortir d'une boucle à tout moment.
L'instruction continue permet de revenir au début de la boucle.
for( [initialisations] ; [test sortie] ; [faire a chaque fois] )
La condition de sortie est située en fin de boucle. Ainsi la boucle est parcourue une fois au minimum.
Il n'y a pas de distinction fonctions / procédures en PHP.
Les fonctions PHP prennent de 0 à n paramètres. Ces paramètres peuvent etre de type quelconque.
Note: Il faut implémenter la fonction en amont de son utilisation, contrairement au C. Dans le cas contraire, PHP sort une erreur du type Call to unsupported or undefined function (fonction) in (file) on line (number)
On ne peut pas déclarer le prototype d'une fonction comme par ex. en Pascal.
Voyons une fonction listant le contenu d'un tableau associatif :
Par défaut, les variables globales ne sont pas connues à l'intérieur du corps d'une fonction. On peut cependant y accéder à l'aide du mot-clé global.
Une autre solution est d'utiliser le tableau associatif $GLOBALS, qui contient toutes les variables globales déclarées à un instant T : $GLOBALS['debug_mode'] équivaut à $debug_mode.
Les fonctions peuvent ou non renvoyer un résultat. on utilise l'intruction return. La variable retournée peut etre de type quelconque. Elle est transmise par copie.
Les paramètres optionnels sont autorisés : il suffit de leur affecter une valeur par défaut.
Par défaut, les paramètres sont transmis par copie, c'est à dire que la fonction possède une copie locale de la variable envoyée. On peut cependant passer un paramètre par adresse en le précédant de &. Cela permet de modifier ce paramètre dans la fonction.
[UNDER CONSTRUCTION]
[UNDER WORK]
resultat = ereg( modele , variable, memoires )
ereg permet de comparer une variable à un modèle. Pour plus d'informations sur les modèle, consulter la doc Perl par exemple.
modele est le modèle testé
variable est la variable à tester.
Le tableau memoires contient les variables mise en mémoire dans le modèle, la première étant $memoires[1]. $memoires[0] contient la variable complète
resultat vaut vrai si la variable correspond au modèle.
La programmation modulaire permet de la réutilisation de code, via l'écriture de librairies.
PHP permet cette modularité via la programmation de librairies classiques et de classes.
Les librairies sont des fichiers PHP traditionnels. Leur extension est .inc par convention, mais rien n'empêche d'utiliser .php3. On peut également inclure un fichier HTML ou d'autre type, cependant les éventuels tags PHP ne seront pas interprétés. On inclus un fichier en utilisant include ou require.
Il existe une différence importante entre les deux :
Un fichier inclus par I<include> est inclu dynamiquement, lors de l'execution du code. Un fichier inclus par I<require> est inclu avant l'interpétation du code. Il est équivalent à la directive #include du C
On peut comprendre la différence sur l'exemple ci-dessous:
Avec include, le résultat est celui escompté, tandis qu'avec require, le fichier malib.inc est inclu quelque soit le résultat du test if.
PHP3 dispose des concepts de POO (Programmation Orientée Objet)
$this-> est l'opérateur de self-reference. On peut utiliser un espace pour plus de lisibilité
Les méthodes se déclarent comme des fonctions.
Le constructeur se déclare comme une méthode. Il doit porter le nom de la classe comme en C++ . Il est appellé automatiquement lors de l'instanciation de la classe.
L'héritage simple est possible en utilisant extends.
Note: le constructeur de la classe mére n'est pas appellé automatiquement. Il convient donc de le faire si nécessaire
Il n'y a pas notion de destructeur d'objet en PHP3.
L'héritage multiple n'existe pas
Il n'y a pas de méthodes et attributs privés. Tout est public et accessible de l'extérieur.
Un objet instancié n'est pas une référence ( un pointeur) mais une variable, sorte de ``tableau associatif muni de methodes''. On peut s'en rendre compte sur une copie d'objet :
PHP ne possède pas -au moins pour l'instant- d'environnement de développement comparable à ceux du C, Vb et autres. Il faut donc en passer par les bonnes vieilles méthodes de grand-père ;) Voici quelques conseils à ce sujet.
Vous pouvez creer une fonction Dbg( $msg ) qui affiche un message de debugage conditionnel. En tete de fichier, definissez la variable $DEBUG à 1 ou 0 pour activer ou non ces messages.
La fonction phpinfo() affiche la configuration courante, les variables d'environnement, et plus.
La variable de configuration memory_limit permet de fixer la taille limite en octets utilisée par un processus PHP.
Si track_errors est actif, la variable globale $php_errormsg stocke le dernier message d'erreur apparu.
Si track_vars est actif, les variables CGI sont stockées resp. dans les tableaux associatifs $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS suivant qu'elles proviennent d'un formulaire en methode GET , POST , dans de cookies.
[EN CONSTRUCTION]
Lorque vous ecrivez une librairie destinée à être réutilisée, evitez au maximum de déclarer des variables globales. Si c'est qaund même nécessaire, préfixer-les avec un préfixe propre à la librairie
Dans cette librairie html.inc, on prefixe les variables par HTML_
[EN CONSTRUCTION]
PHP ne possède pas en standard l'équivalent des Sessions ASP. Cependant, il existe des librairies PHP3 qui implémente la Session.
L'éventail de fonctions PHP est nettement supérieur.( plus de 500 fonctions ).
PHP implémente la programmation orientée objet.
PHP reconnait les balises ASP <% et %> ainsi que <%= (permettant l'afichage de variables ). Il suffit pour cela de modifier la configuration: asp_tags = On
PHP gère en standard -et simplement- le File Upload
PHP implémente les expressions régulières
En plus d'ODBC, PHP gère en accès natifs de nombreux SGBD:
Oracle, Sybase, Informix, mySQL, Adabas, Empress, FilePro, InterBase, mSQL, PostgreSQL, Solid, SQLServer, Unix Dbm.
Note : la plupart de ces sites sont en anglais
Site officiel PHP3
http://fr.php.net/
Introduction a PHP
http://www.devshed.com/Server_Side/PHP/Introduction/
Tutorials
http://clauer.citeweb.net/php3tut/php3_tut.html [fr] Installation sur Windows
http://lwest.free.fr/doc/php/configuration_NT_fr.html [fr] http://www.umesd.k12.or.us/php/win32install.html http://lwest.free.fr/doc/php/configuration_odbc.html
Librairies
http://px.sklar.com/ http://phplib.shonline.de/
" [1]
# [1]
$GLOBALS [1]
$HTTP_COOKIE_VARS [1]
$HTTP_GET_VARS [1]
$HTTP_POST_VARS [1]
$php_errormsg [1]
$this-> [1]
& [1]
</script> [1]
<? [1] [2]
<?php [1]
<script language="php"> [1]
' [1]
) [1]
-q [1]
. [1]
.inc [1]
/ [1]
/* ... */ [1]
// [1]
; [1] [2] [3]
? : [1]
?> [1] [2]
Objet [1]
POO [1]
Syntaxe [1]
Syntaxes [1]
\ [1]
__FILE__ [1]
__LINE__ [1]
aksort [1]
and [1]
arsort [1]
asort [1]
asp_tags = On [1]
break [1] [2]
case [1] [2]
classe [1]
constructeur [1]
continue [1]
copie [1]
current [1]
default [1]
define [1]
destructeur [1]
doubleval [1]
each [1]
echo [1]
end [1]
ereg [1]
extends [1]
fonctions [1]
for( [1]
gettype [1]
global [1]
héritage [1]
id_real [1]
include [1]
intval [1]
is_array [1] [2]
is_double [1]
is_float [1] [2]
is_int [1] [2]
is_integer [1]
is_long [1]
is_object [1]
is_string [1]
isset [1] [2]
key [1]
ksort [1]
list [1]
memory_limit [1]
modèle [1]
next [1]
not [1]
or [1]
phpinfo() [1]
prev [1]
procédures [1]
require [1]
reset [1]
return [1]
rsort [1]
settype [1]
sizeof [1]
sort [1]
strval [1]
switch [1]
track_errors [1]
track_vars [1]
uasort [1]
unset [1]
usort [1]
valeur par défaut [1]